package com.holyn.guofang.presenter.brand;

import com.holyn.guofang.model.webhttp.wo.AlgorismWo;
import com.holyn.guofang.model.webhttp.wo.BrandItemInfoWo;
import com.holyn.guofang.model.webhttp.wo.ImageMergeWo;
import com.holyn.guofang.model.webhttp.wo.ImagePartitionWo;
import com.holyn.guofang.model.webhttp.wo.ImageSimilarWo;
import com.holyn.guofang.model.webhttp.wo.StatusWo;
import com.holyn.guofang.model.webhttp.wo.TaskIDWo;
import com.holyn.guofang.model.webhttp.wo.TaskWo;
import com.holyn.guofang.model.webhttp.wo.UserCardListWo;
import com.holyn.guofang.model.webhttp.wo.UserInfoWo;
import com.holyn.guofang.presenter.AbstractBasePresenterImp;
import com.holyn.guofang.presenter.BaseView;

/**
 * Created by Holyn on 2017/7/21.
 */

public class BrandContract {

    public static abstract class Presenter extends AbstractBasePresenterImp{

        public Presenter(BaseView baseView) {
            super(baseView);
        }

        public abstract void addAlgorismWoView(BrandContract.AlgorismWoView algorismWoView);
        public abstract void addImgPartitionView(BrandContract.ImgPartitionView imgPartitionView);
        public abstract void addImgMergeView(BrandContract.ImgMergeView imgMergeView);
        public abstract void addSimilarImgView(BrandContract.SimilarImgView similarImgView);
        public abstract void addSearchTradeView(BrandContract.SearchTradeView searchTradeView);
        public abstract void addMyDealProcessView(BrandContract.MyDealProcessView myDealProcessView);

        public abstract void postAlgorism(final int requestAction, String typeCode);

        /**
         * 分拆组合
         */
        public abstract void postImgPartition(final int requestAction, String SrcImgID);

        /**
         * 分拆组合-预览分拆组合结果
         *
         * @param SrcImgID 商标源图 ID(若该值不为空则直接用该值作为图 片路径，不需要传文件流)
         * @param Num 商标分拆组合数据，具体含义请参考《国方商标识 别手 WebService 接口文档》
         *            商标分拆组合数据, 分别用“；”及“|”分割，如：“1；2|3；4”意为编号1、2组合为一张图片，编号3、4组合为一张图片
         *
         */
        public abstract void postImgMerge(final int requestAction, String SrcImgID, String Num);
        /**
         * 替换追加
         */
        public abstract void postSimilarImg(final int requestAction, String SrcImgID, String ImgIDs, Integer TopCount);

        /**
         * 获取任务 ID。
         */
        public abstract void postTaskID(final int requestAction);

        /**
         * 通过任务id查询
         */
        public abstract void postSearchResultByTaskID(final int requestAction, Integer TaskID, String SortType, Integer BeginRow,Integer EndRow);

        /**
         * 商标查询
         */
        public abstract void postSearchTradeMarkInfo(final int requestAction
                , Integer TaskID
                , Integer FrontCount
                , String SearchMode
                , String SearchType
                , String Content
                , String MarkClass
                , String MarkGroup
                , String QueryMode
                , String Algorithm
                , String State
                , String DateType
                , String BeginDate
                , String EndDate);

        /**
         * 获取任务ID的列表
         */
        public abstract void postTaskList(final int requestAction, Integer pageSize, Integer page);

        /**
         * 获取注册信息
         * 然后通过 判断返回参数 userCard ,如果该字段 内容为空，代表卡已过期，非空则代表未过期
         */
        public abstract void postUserInfo(final int requestAction);

        /**
         *  卡已过期,请求接口 2.5.6 获取用户的国方卡信息 （参数activeState取2）
         *  1.1：过期处理：请求接口 2.5.6 获取用户的国方卡信息 （参数activeState取2），根据返回数据：
         *  1.1.1—>如果 个数 大于 0 则 ，提示  当前国方卡已过期，请前往 我的-用卡管理 激活卡。
         *  1.1.2—>如果等于0，则提示  当前国方卡已过期，请前往 我的-购国方卡 购卡。
         *  1.2：未过期:
         *  无需处理,界面正常操作: 注册信息、替换主设备、使用日志
         *  执行B逻辑判断（下面详解）: 识别查询 、 商标查询
         *  先执行C逻辑，然后在执行B（下面详解）: 我的-处理进程
         */
        public abstract void postUserCardList(final int requestAction, Integer activeState, Integer pageSize, Integer page);

        /**
         * 未过期，C逻辑
         * 1、根据接口2.4.15 获取用户的任务信息列表 中 参数 unpay ，该参数是由多个未完成id组成的字符串（需要自己处理一下数据），
         * 详细看文档。具体操作就是：在任务列表里，点击已完成的任务（正在处理的没有 点击响应事件），获取接口2.4.15数据，然后根据 该任务id 是否在unpay 里面 ：
         * 1.1-> 如果不在，则代表已扣费，可以直接跳转界面。
         * 1.2-> 如果在，则执行B逻辑，只不过需注意的是，因为 处理进程界面 这里 无需等待查询的结果 ，所以直接跳到 B逻辑 中，
         * 是否弹框，然后判断1.1-1.3的那里，需留意如果扣费了，需要更改unpay数据。
         */
//        public abstract void postTaskList //接口在上面

        /**
         * B逻辑详解：
         * 1、首先触发这个逻辑是在  30秒前获取结果接口  或者 30秒后获取结果接口 （因为识别 跟 查询 的接口不一样，所以就不这注释接口了），
         * 当有结果返回，首先因为在判断A逻辑时 调用了 2.3.8 接口 获取注册信息，而里面有个validMethod参数，这个将决定你的扣费规则，参数描述文档有，
         * 不同的参数就弹出不同界面输入相对应数据，但需要注意：
         * 1.1->当validMethod=0 时，弹出界面，输入的密码需要md5加密。注意这个密码是在激活卡时（我的-用卡管理），当用户选择密码验证 时，需要弹框让用户设定密码，并非登录密码。
         * 1.2->当validMethod=1 时，弹出界面，点获取验证码按钮 对应接口 2.4.17 获取任务支付验证码
         * 1.3->当validMethod=2时，空值，这个就不用弹界面了，直接调用2.4.18接口。
         * 处理完 1.1 或 1.2 数据后，调用2.4.18 任务支付 ，其中参数validCode 就是上面的处理结果。
         * 最后，如果 2.4.18 任务支付 接口返回成功，代表扣费成功，到此为止
         */
        public abstract void postTaskPayCode(final int requestAction);//2.4.17

        public abstract void postTaskPay(final int requestAction, Integer taskID, String validCode);//2.4.18



    }

    public interface AlgorismWoView{
        public void responseSuccess(final int requestAction, AlgorismWo algorismWo);
    }

    public interface ImgPartitionView{
        public void responseSuccess(final int requestAction, ImagePartitionWo imagePartitionWo);
    }

    public interface ImgMergeView{
        public void responseSuccess(final int requestAction, ImageMergeWo imageMergeWo);
    }

    public interface SimilarImgView{
        public void responseSuccess(final int requestAction, ImageSimilarWo imageSimilarWo);
    }

    public interface SearchTradeView{
        public void responseSuccess(final int requestAction, TaskIDWo taskIDWo);
        public void responseSuccess(final int requestAction, BrandItemInfoWo brandItemInfoWo);
        void responseSuccess(final int requestAction, UserInfoWo userInfoWo);
        void responseSuccess(final int requestAction, UserCardListWo userCardListWo);
        void responseSuccess(final int requestAction, StatusWo statusWo);//2.4.17 获取任务支付验证码、 2.4.18 任务支付
    }

    public interface MyDealProcessView{
        void responseSuccess(final int requestAction, TaskWo taskWo);
        void responseSuccess(final int requestAction, UserInfoWo userInfoWo);
        void responseSuccess(final int requestAction, UserCardListWo userCardListWo);
        void responseSuccess(final int requestAction, StatusWo statusWo);//2.4.17 获取任务支付验证码、 2.4.18 任务支付
        void responseSuccess(final int requestAction, BrandItemInfoWo brandItemInfoWo);
    }

}
